<?php
/**
 * Created by PhpStorm.
 * User: zhangrxiang
 * Date: 2017/1/3
 * Time: 12:26
 */

//http_build_query — 生成 URL-encode 之后的请求字符串
//string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
//query_data
//可以是数组或包含属性的对象。
//
//一个 query_data 数组可以是简单的一维结构，也可以是由数组组成的数组（其依次可以包含其它数组）。
//
//如果 query_data 是一个对象，只有 public 的属性会加入结果。
//
//numeric_prefix
//如果在基础数组中使用了数字下标同时给出了该参数，此参数值将会作为基础数组中的数字下标元素的前缀。
//
//这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。
//
//arg_separator
//除非指定并使用了这个参数，否则会用 arg_separator.output 来分隔参数。
//
//enc_type
//默认使用 PHP_QUERY_RFC1738。
//
//如果 enc_type 是 PHP_QUERY_RFC1738，则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码，空格会被编码成加号（+）。
//
//如果 enc_type 是 PHP_QUERY_RFC3986，将根据 » RFC 3986 编码，空格会被百分号编码（%20）。
//
//返回值 ¶
//
//返回一个 URL 编码后的字符串。

$data = ['foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor'];

echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&amp;').PHP_EOL;


class parentClass {
	public    $pub      = 'publicParent';
	protected $prot     = 'protectedParent';
	private   $priv     = 'privateParent';
	public    $pub_bar  = Null;
	protected $prot_bar = Null;
	private   $priv_bar = Null;

	public function __construct(){
		$this->pub_bar  = new childClass();
		$this->prot_bar = new childClass();
		$this->priv_bar = new childClass();
	}
}

class childClass {
	public    $pub  = 'publicChild';
	protected $prot = 'protectedChild';
	private   $priv = 'privateChild';
}

$parent = new parentClass();

//pub=publicParent&pub_bar%5Bpub%5D=publicChild
echo $str = http_build_query($parent).PHP_EOL;
//pub=publicParent&pub_bar[pub]=publicChild
echo urldecode($str).PHP_EOL;